
package com.csz.model;

import com.csz.dao.Persistencia;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/* @author Arthur F. Zanona */

public class Pessoa extends Persistencia {
    private static final long serialVersionUID = 1L;
    private String pesNome;

    public Pessoa() {
    }

    public Pessoa(Integer pesId) {
        this.id = pesId;
    }

    public Pessoa(Integer pesId, String pesNome ) {
        this.id = pesId;
        this.pesNome = pesNome;
    }

    public String getNome() {
        return pesNome;
    }

    public void setNome(String pesNome) {
        this.pesNome = pesNome;
    }

    @Override
    public void salvar() {
        String namedQuery = this.getId() == null ? Inserir : Atualizar ;
        // passagem de parametro
        List<Object> params = Arrays.asList(
                new Object[] {
                    this.pesNome,
                    // se for inserir, esse parametro é o retorno da SP,
                    // senao eh a clausa do where na atualizacao
                    this.getId() != null ? this.getId() : null
                }
         );
        // fim passagem de parametro

        // o retorno da sp é o id da entidade        
        this.id = (Integer) callNamedStoredProcedure(namedQuery, params, Integer.class);
    }

    public static Object consultar(Integer id) {
        return Pessoa.consultarNamedQuery(ConsultarPorId, Arrays.asList(new Object[]{id}));
    }

    @Override
    public void remover() {
        PreparedStatement ps = createStatementNamedQuery(Remover, Arrays.asList( new Object[] { this.getId() } ));
        try {
            ps.execute();
        } catch (SQLException ex) {}
    }

    public static List<Object> consultar(){
        return Pessoa.consultarNamedQuery(ConsultarTodos, Arrays.asList(new Object[]{}));
    }

   public static List<Object> consultarNamedQuery(String namedQuery, List params){
        PreparedStatement ps = createStatementNamedQuery( namedQuery, params );
        List<Object> lista = new ArrayList<Object>();
        try {
            ResultSet rs = ps.executeQuery();
            while ( rs.next() ) {
                Pessoa p = new Pessoa(
                        rs.getInt("pes_id")  ,
                        rs.getString("pes_nome") 
                );
                lista.add(p);
            }
        }
        catch (SQLException ex) {}
        return lista;
    }

    // QUERY SQL --------------------------------------------------------------------------------------------------------------
    public static final String ConsultarTodos  = "SELECT usu_id,usu_login,usu_pass FROM usuario";
    public static final String ConsultarPorId = "SELECT * FROM .. WHERE .._id = ?";
    private static final String Remover = "CALL apagar_pessoa (?)";
    private static final String Atualizar = "CALL atualizar_pessoa (?,?)";
    private static final String Inserir = "CALL inserir_pessoa (?,?)";
    // FIM QUERY SQL --------------------------------------------------------------------------------------------------------------


}
